// https://leetcode.cn/problems/perfect-squares/
// Created by ade on 2022/9/16.
// 给你一个整数 n ，返回 和为 n 的完全平方数的最少数量 。
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Solution {
public:
    // 思考：
    int numSquares(int n) {
        vector<int> dp(n + 1);
        for (int i = 0; i <= n; i++) {
            dp[i] = i;
            for (int j = 1; i - j * j >= 0; j++) {
                dp[i] = min(dp[i], dp[i - j * j] + 1); // 如果遇到1，4，9,16这种平方数那么一定会取值dp[0]的
            }
        }
        return dp[n];
    }
};

